import torch

# todo 张量的 transpose 和 permute 方法
# todo transpose 方法
# 创建一个二维张量（矩阵）
tensor_2d = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("原始二维张量形状:", tensor_2d.shape)  # 输出: torch.Size([2, 3])

# 使用 transpose 交换第 0 维和第 1 维
transposed_tensor = tensor_2d.transpose(0, 1)
print("transpose 后的二维张量形状:", transposed_tensor.shape)  # 输出: torch.Size([3, 2])

# 创建一个三维张量
tensor_3d = torch.randn(2, 3, 4)
print("\n原始三维张量形状:", tensor_3d.shape)  # 输出: torch.Size([2, 3, 4])

# 使用 transpose 交换第 1 维和第 2 维
transposed_3d = tensor_3d.transpose(1, 2)
print("transpose 后的三维张量形状:", transposed_3d.shape)  # 输出: torch.Size([2, 4, 3])


# todo permute 方法

# 创建一个三维张量
tensor_3d = torch.randn(2, 3, 4)
print("原始三维张量形状:", tensor_3d.shape)  # 输出: torch.Size([2, 3, 4])

# 使用 permute 重新排列维度为 (2, 0, 1)
permuted_tensor = tensor_3d.permute(2, 0, 1)
print("permute 后的三维张量形状:", permuted_tensor.shape)  # 输出: torch.Size([4, 2, 3])

# todo 总结
#  transpose 主要用于交换两个指定的维度，适用于简单的维度交换场景，如矩阵转置。
#   permute 可以对张量的所有维度进行任意的重新排列，适用于复杂的维度调整需求。






